using System.Diagnostics;
namespace AOPDemo;
public class OrderServiceDecorator : IOrderService
{
    private readonly IOrderService _realService;
    public OrderServiceDecorator(IOrderService realService)
    {
        _realService = realService;
    }
    public void PlaceOrder(string product)
    {
        // 前置处理（AOP切入点）
        Console.WriteLine($"[代理] 开始下单 {DateTime.Now}");
        var stopwatch = Stopwatch.StartNew();
        try
        {
            // 调用真实方法
            _realService.PlaceOrder(product);
            // 后置处理（成功）
            Console.WriteLine($"[代理] 下单成功，耗时 {stopwatch.ElapsedMilliseconds}ms");
        }
        catch (Exception ex)
        {
            // 异常处理
            Console.WriteLine($"[代理] 下单失败: {ex.Message}");
            throw;
        }
        finally
        {
            // 最终处理
            Console.WriteLine($"[代理] 方法调用结束");
        }
    }
}